package br.edu.ifrn.view;

import java.util.List;

import javax.annotation.PostConstruct;
import javax.ejb.EJB;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;
import javax.faces.context.FacesContext;

import br.edu.ifrn.controller.CategoriaUsuarioEJBLocal;
import br.edu.ifrn.controller.UsuarioEJBLocal;
import br.edu.ifrn.model.CategoriaUsuario;
import br.edu.ifrn.model.Usuario;

@ManagedBean
@ViewScoped
public class UsuarioMBean {
	
	private Usuario usuario;
	private List<Usuario> listaUsuario;
	private String novaCategoria;
	private String confirmaSenha;
	
	public UsuarioMBean() {
		usuario = new Usuario();
	}
	
	@EJB
	private UsuarioEJBLocal usuarioEJB;
	
	@EJB
	private CategoriaUsuarioEJBLocal categoriaUsuarioEJB; 
	
	@PostConstruct
    public void construct() {
		listaUsuario = usuarioEJB.listar();
    }
	
	public String index() {
		return "/usuario/index.xhtml";
	}
	
	public List<Usuario> getListaUsuario(){
		return listaUsuario;
	}

	public Usuario getUsuario() {
		return usuario;
	}
	
	public Usuario findUsuario(Long id) {
		return usuarioEJB.find(id);
	}
	
	public void setUsuario(Usuario usuario) {
		this.usuario = usuario;
	}
	
	public String actionNovaCategoria(){
		try{
			CategoriaUsuario categoriaUsuario = new CategoriaUsuario(novaCategoria);
			categoriaUsuarioEJB.salvar(categoriaUsuario);
			FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO, "Categoria de Usuário cadastrada com sucesso", null));
		}
		catch (Exception e) {
			FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR, "Categoria de Usuário não cadastrada, tente novamente", null));
		}
		return index();
	}
	
	public String getConfirmaSenha() {
		return confirmaSenha;
	}
	public void setConfirmaSenha(String confirmaSenha) {
		this.confirmaSenha = confirmaSenha;
	}
	
	public String actionSalvar() {
		try {

			String senha = this.usuario.getSenha();
			if (senha != null &&
		            senha.trim().length() > 0  &&
		            !senha.equals(getConfirmaSenha())) {
				FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR,"A senha não foi confirmada corretamente", null));
				return null;
			}
			usuarioEJB.salvar(usuario);
			FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO, "Usuário cadastrado com sucesso", null));
		} catch (Exception e) {
			FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR, "Usuário não cadastrado, tente novamente", null));
		}
		
		return index();
	}
	
	public String actionRemover() {
		try {
			usuarioEJB.remover(usuario);
			FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO, "Usuário removido com sucesso", null));
		} catch (Exception e) {
			FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR, "Usuário não removido, tente novamente", null));
		}
		
		return index();
	}
	
	public void actionLimpar() {
		usuario = new Usuario();
	}

	public String getNovaCategoria() {
		return novaCategoria;
	}

	public void setNovaCategoria(String novaCategoria) {
		this.novaCategoria = novaCategoria;
	}
}
